//
//  ALStatus.swift
//  Swift01
//
//  Created by Miaoyang on 16/4/13.
//  Copyright © 2016年 Miaoyang. All rights reserved.
//

import UIKit

class ALStatus: NSObject {
    
    
    /// 微博创建时间
    var created_at: String?
    
    /// 微博ID
    var id:	Int64 = 0
    
    /// 微博信息内容
    var text: String?
    
    /// 微博来源
    var source: String? {
        didSet {
            // 当KVC给来源赋值,我们重新处理来源
            if let newSource = source {
                // 截取字符串 String
                guard let firstRange = newSource.rangeOfString("\">") else {    // 58..<60   58 59
                    print("没有匹配\">")
                    return
                }
                
                guard let secondRange = newSource.rangeOfString("</a>") else {  // 68..<72 68 69 70 71
                    print("没有匹配</a>")
                    return
                }
                
                //                print("firstRange: \(firstRange)")
                //                print("secondRange: \(secondRange)")
                
                // 拼接来源的范围 360安全浏览器 (60 67) 60..<68  60 是firstRange的结尾(endIndex)  68: secondRange的开始 startIndex
                let range = firstRange.endIndex..<secondRange.startIndex
                
                // 将截取的字符串重新给source赋值, 在didSet重新给自己赋值,不会触发didSet.
                source = "来自 " + newSource.substringWithRange(range)
            }
        }
    }
    
    
    /// 微博的配图 [Int], [String: AnyObject], [[String: AnyObject]]
    /// 数组,里面保存的是字典
    var pic_urls:[[String: AnyObject]]? {
        didSet {
            // 当KVC给pic_urls赋值时,将pic_urls转成NSURL数组方便外面的人来使用
            let count = pic_urls?.count ?? 0
            
            // 没有图片要显示
            if count == 0 {
                return
            }
            
            // 创建storePicutreURLs数组保存NSURL
            storePicutreURLs = [NSURL]()
            
            // 有图片要显示
            for dict in pic_urls! {
                // 获取到每个字典,解析thumbnail_pic所对应的value,value是一个图片的地址(String)
                let urlString = dict["thumbnail_pic"] as! String
                
                let url = NSURL(string: urlString)!
                
                storePicutreURLs?.append(url)
            }
        }
    }
    /// 模型提供好用一点的图片NSURL数组
    var storePicutreURLs: [NSURL]?

    //用户模型,服务器返回的用户数据值字典,需要我们自己来转模型
    var user: ALUser?
    
    //被转发的微博模型
    var retweeted_status: ALStatus?
    
    /// 字典转模型
    init(dict: [String: AnyObject]) {
        super.init()
        
        setValuesForKeysWithDictionary(dict)
        
    }
    //拦截User这个key进行字典转模型以及赋值
    override func setValue(value: AnyObject?, forKey key: String) {
       ALPrint("forKey: \(key), value: \(value)")
    
        // 拦截user这个key，不要系统来KVC,我们自己来赋值
        if key == "user" {
            // 在判断value是不是字典
            if let dict = value as? [String: AnyObject] {
                // 字典转模型,并且赋值给user属性
                user = ALUser(dict: dict)
            
            }
            
            // 一定要返回,如果不返回,又会调用 super.setValue(value, forKey: key),又会将value（字典）赋值给user
            return
        }
        //拦截模型中的配图URL
        if key == "retweeted_status" {
            //转value换为数组模型
            if let dict = value as? [String:AnyObject]{
                
                retweeted_status = ALStatus(dict: dict)
            }
            return
        }
        
        super.setValue(value, forKey: key)
    }
    
    /// 字典中的key在模型中找不到对应的属性
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    /// 对象的打印
    override var description: String {
        get {
            let keys = ["created_at", "id", "text", "source", "pic_urls"]
            // 通过key在模型中招属性的值,找到属性的值,将key和值,拼接到字典里面
            return "\n \t微博模型: \(self.dictionaryWithValuesForKeys(keys).description)"
        }
    }
}



